// RT-Thread头文件
#include <rtthread.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <rtdevice.h>
#include <board.h>

// HAL库头文件
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
#include "rt_thread_demo.h"
#include "../hardware/PWM/fly_pwm.h"             // PWM

uint8_t hal_tim8_pwm_flag = 1;

/****************************** fly_pwm_init BEGIN *****************************
 * 函    数：fly_pwm_init
 * 功    能：初始化TIM8的四路PWM输出
 *           包括TIM8的GPIO和TIM8的PWM配置
 * 参    数：无
 *           TIM8的GPIO配置为PB6,PB7,PB8,PB9
 * 返 回 值：无
 * 注意事项：无
 ******************************************************************************/
void fly_pwm_init()
{
    MX_TIM8_Init(); // TIM8 四路PWM初始化
    HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); // 使能TIM8的PWM Channel1 输出
    HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_3);
    HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_4);
    if(hal_tim8_pwm_flag) fly_control_init_status |= 0b00100000;//成功标志位
}
/****************************** fly_pwm_init END *******************************/

/****************************** fly_pwm_set BEGIN ******************************
 * 函    数：fly_pwm_set
 * 功    能：设置TIM8的四路PWM输出
 *           包括设置四个通道的PWM比较值
 * 参    数：
 *       mode      ：0,不限制PWM范围;1,限制PWM范围在1000~2000us,电调使用
 *       pwmVal_1  ：通道1的PWM比较值
 *       pwmVal_2  ：通道2的PWM比较值
 *       pwmVal_3  ：通道3的PWM比较值
 *       pwmVal_4  ：通道4的PWM比较值
 * 返 回 值：无
 * 注意事项：无
 ******************************************************************************/
void fly_pwm_set(uint8_t mode, uint32_t pwmVal_1, uint32_t pwmVal_2, uint32_t pwmVal_3, uint32_t pwmVal_4)
{
    if (mode == 1)
    {
        if (pwmVal_1 >= 1000 && pwmVal_1 <= 2000) __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_1, pwmVal_1);
        if (pwmVal_2 >= 1000 && pwmVal_2 <= 2000) __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_2, pwmVal_2);
        if (pwmVal_3 >= 1000 && pwmVal_3 <= 2000) __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_3, pwmVal_3);
        if (pwmVal_4 >= 1000 && pwmVal_4 <= 2000) __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_4, pwmVal_4);
        return;
    }
    else if (mode == 0)
    {
        __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_1, pwmVal_1);
        __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_2, pwmVal_2);
        __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_3, pwmVal_3);
        __HAL_TIM_SetCompare(&htim8, TIM_CHANNEL_4, pwmVal_4);
        return;
    }
}
/****************************** fly_pwm_set END ********************************/





